--- title: "05-HTTP 与 HTTPS" created: 2026-09-01 tags: - 项目筑基 --- # HTTP 与 HTTPS > 讲透篇里我们把"一个网址怎么变成一次实际访问"拆到了:域名翻译成 IP(找到小区)→ 端口(找到窗口)→ 进程(窗口后面的办事员)。那办事员接了单之后,浏览器和服务器之间到底在聊什么?这套对话的规矩,就是 **HTTP**(超文本传输协议)。 ### **对话的基本套路:一问一答** HTTP 的对话非常"机械":浏览器发一个**请求**,服务器回一个**响应**,说完这轮就翻脸不认人(下一节讲这个"失忆"问题)。 **请求**大致长这样:`我要什么(方法)+ 我要哪个资源(路径)+ 一些说明(请求头)+ 附加材料(请求体,可选)`。方法常见就几个——`GET` 是"拿东西"(打开网页)、`POST` 是"交材料"(提交表单/登录)、`PUT`/`DELETE` 是"改"和"删"。 **响应**里最显眼的是**状态码**,相当于窗口办事员的一句话回复: | 状态码 | 意思 | 你遇到过它的场景 | | --- | --- | --- | | 200 | 办好了,东西给你 | 正常打开网页 | | 301 / 302 | 这窗口搬走了,去新地址(永久/临时) | http 跳 https、域名换了 | | 304 | 你上次拿过一样的,用你手里的缓存吧 | 刷新页面秒开 | | 403 | 保安不让进 | 没权限的目录、被封的访问 | | 404 | 窗口里没你要这个东西 | 链接写错了、页面删了 | | 500 | 窗口里面出事故了 | 服务器代码崩了 | 想亲眼看这套对话,两个办法:浏览器按 `F12` 打开开发者工具切到**网络(Network)面板**,每个请求的状态码、请求头、响应头全摆在那;或者用 `curl -v 地址` 在命令行里看原始来往。 ### **HTTP 是明信片,HTTPS 是密封信封** 纯 HTTP 有个要命的属性:**全程明文**。你和服务器之间的每一句话,路上经过的任何一个节点(查号台、路由器、同一条公共 WiFi 里的任何人)都能看、甚至能改——就像把密码写在明信片上寄出去。HTTPS 干的事就是给信封上锁:先和服务器**验明正身 + 约定一把只有我俩知道的钥匙**(TLS 握手),之后的对话全部加密。 那"验明正身"怎么验?浏览器不是直接信服务器,而是看它有没有**证书颁发机构(CA)**盖的章——相当于公证处确认"这窗口真的是银行开的,不是隔壁骗子装修的"。最常见的免费"盖章处"是 Let's Encrypt。 落到你实操过的场景里: - **快速建站**:Nginx 监听 80 端口服务的是纯 HTTP;要上 HTTPS 就得给服务器配一张证书(宝塔面板有一键申请,背后就是 Let's Encrypt)。 - **Cloudflare Tunnel**:流量走 Cloudflare 中转,证书是 Cloudflare 在它那一侧直接配好的——这也是为什么走隧道的服务"无需输入端口号"还自带 https,你基本不用自己操心证书这档事。 还有个容易踩的坑叫**混合内容**:HTTPS 页面里引用了 HTTP 的图片/脚本,浏览器会直接拦——因为密封信封里塞了一张明信片,锁等于白上。 ### **失忆的对话怎么记住"你登录了"** HTTP 每次请求之间是互相不认识的(无状态),那网站怎么记住你登录了?靠 **Cookie**:登录成功后服务器发你一张"临时出入证"(存在浏览器里),之后每次请求自动出示这张证,服务器对着登记簿核对。所以别随手接受陌生网站的 Cookie,也别在公共电脑上登了号不清除——那张出入证还在。 --- ⬅️ [[04-校园网寝室WIFI|校园网寝室WIFI]] 🏠 [[00-网络与项目|00-网络与项目]] ➡️ [[06-DNS 记录与域名实战|DNS 记录与域名实战]]